home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
data
/
dora
/
doramain.plt
< prev
next >
Wrap
Text File
|
1993-11-30
|
19KB
|
625 lines
/*******************************************************************
* RT-BBS NET専用MOPTERMオートパイロットDORAV1.04a *
* All Right Reserved, Copyright(c) モップ *
* (Masahiro Kezuka NIFTY-ID PFF00570) *
* All Right Reserved, Copyright(c) Yama-chan 1992 *
* (Hiroaki Yamada NIFTY-ID PEE01244 *
* All Right Reserved, Copyright(c) DORAGON 1992 *
* (Kouji Koumura NIFTY-ID GBH00541 *
* TGK-NET TGK0013 *
* ITY-NET ITYT0023 *
* All Right Reserved, Copyright(c) Take 1993 *
* (Masamiti Takemoto NIFTY-ID GHA00253 *
* ITY-NET ITYT0001 *
********************************************************************/
/* DORAのV/L */
%VerLev{1.04a};%VL {104a};
/* DEBUG MODE */
%DEBUG {No};
/*******************************************************************
* RTBBS-NET専用MOPTERMオートパイロットDORAMAIN.PLT(メイン処理 ) *
********************************************************************
動作確認●・ FMTOWNS2(初代型),(6MB増設),外付けH/D
OMRON MD24FS5 & MD96FB5V
・ FMTOWNS20F,内付けH/D、クロスケーブル接続
OMRON MD24FP5
・ FMTOWNS2F ,(6MB増設),外付けH/D
MICROCORE MC24PA5
・ FMTOWNSCX20 ,(8MB増設),外付けH/D
PM2400F2(富士通)
システムソフトV2.1L20, MOPTERM V2.03b
対応確認済HOSTシステム
・The resource版 Turbo-BBS ver5.3βa
・The resource版 Turbo-BBS ver5.3βb FINAL
・The resource edition Turbo-BBS ver5.3βb FINAL! ITY-Net 版
・KMF Independent Forum System Based RTBBS Ver.0.14
・Joyful Communication Network System ("The resource版 Turbo-BBS"改造)
・The resouce版 turbo-BBS" を改編した "なっとぉ版 Turbo-BBS
・K.F.C.版 RT-BBS ver5.3βb+.02 FINAL!
* 定数・変数領域の指定 */
/* ID & PASSWORD */
var ID [8];
var PassWord[8];
/* アクセスユ-ザ-確認後アクセス中ならばトークする会員ID */
var TalkID1[20];var TalkID2[20];var TalkID3[20];var TalkID4[20];
var TalkID5[20];var TalkID6[20];var TalkID7[20];var TalkID8[20];
var TalkID9[20];var TalkID10[20];var TalkID11[20];var TalkID12[20];
var TalkID13[20];var TalkID14[20];var TalkID15[20];var TalkID16[20];
var TalkID17[20];var TalkID18[20];var TalkID19[20];var TalkID20[20];
var CMt1[50];var CMt2[50];var CMt3[50];var CMt4[50];var CMt5[50];
var CMt6[50];var CMt7[50];var CMt8[50];var CMt9[50];var CMt10[50];
var CMt11[50];var CMt12[50];var CMt13[50];var CMt14[50];var CMt15[50];
var CMt16[50];var CMt17[50];var CMt18[50];var CMt19[50];var CMt20[50];
var WhoRes[1200];
/* 電話番号 */
var ROAD [80];
var ROAD2[80];
var ROAD3[80];
var ROAD4[80];
var sROAD[80]; /* 接続電話番号 */
var GEN [3];
var GEN2[3];
var GEN3[3];
var GEN4[3];
/*モデムコマンド及びダイアルタイプ */
var MODEM [60];
var DIAL [1];
/* ディレクトリ */
var TEMP [64];
var LOG [128];
var UP [64];
var SOUND [64];
var TEMP2 [64];
var LOG2 [64];
var SOUND2 [64];
var UP2 [64];
var FSW [64];
var RTTLdir [64];
var RTTL2 [64];
var VIEWLOG [64];
/* ファイルパス名 */
var RTTLC [64];
var MEMBER [64];
/* ログファイル作成モード */
var LOGmode [8];
/* NETの名称 */
var NET [6];
var NETname [40];
/* みかか代計算データ */
var AcP [12];
var AcPNo [1];
/* テレジョーズの使用 */
var TELJ [3];
TELJ:={/J}; /*デフォルトはテレジョーズモードです、「TELJ:={}」にて通常モード指定可。*/
/*○○○-NETにおける処理 */
var TGK [1536];
/* 画面背景色 */
var R [3];
var G [3];
var B [3];
/* オプションスイッチ */
var BELFIL [64];
var VBELL [3];
var NATTOU [3];
var CLICK [3];
var TAB [2];
var LOCK [3];
var OAK [5];
var HOSEI [3];
/* 保存ファイルの圧縮指定 */
var COMPRESS[3];var ARCHIVER[64];
/* 設定ファイルのパス名 */
var SETFILE [64];
var TGKFILE [64];
var SETFILE1[64];
var SETFILE2[64];
/* オンライン処理フラグ */
var DORTBBS [3];
var MAILDEL [3];
var MAILRED [3];
var PLTmemo [3]; /* 「w」メモフラグ */
var REDIAL [4];
var START [3];
var AP3 [3];
var WHO [5];
var mPOINT [8];
var LGLOOK [3];
var MACTIV [8];
var BDLIST [3];
var DLLIST [3];
var FREE1 [3];
var JISAR [3];
var ESCon [3];
/* 各種設定フラグ */
var OPENING [3]; /* オープニング画面表示 */
var DORAEND [8]; /* 自動通信終了時処理 */
var UPDOWN [5];
var FMGR [64]; /* ファイルマネージャパイロットファイル名 */
var allPRO [3];
var genteiT [3]; /* アクセス時間限定フラグ */
/* 変数の定義 */
var sROAD [80]; /* チャンネル変更 */
var openT [2]; /* RT-BBS開局時間 */
var closeT [2]; /* RT-BBS閉局時間 */
var AM3 [6]; /* ログイン時フラグ */
var ACCESS [5]; /* 通信開始時刻 [HH:MM] */
var liblist [40]; /* ライブラリ番号リスト */
var IDlist [80]; /* 爆裂トークIDリスト */
var Btitle [3]; /* タイトルから読みたいボードのログを指定 */
/* ウェイト時間の設定 */
%Wtime1 10; /* モデム応答待ち時間 */
%Wtime2 60;%Wtime3 90;%Wtime5 180; /* RTBBS-NETプロンプト待ち時間 */
%Wtime4 60; /* select入力待ち時間 */
%WtimeD 3600; /* ダウンロード終了待ち時間の限定 */
var BELL [1]; /* ベルコード */
/* 復帰改行コード */
%CRLF @xc({0d})|@xc({0a});
/************************************************************************
* 共通処理モジュール *
************************************************************************/
/* 音声メッセージ出力処理 */
%SNDMSG {[file]
case (SOUND2={}||SOUND2={\},
{No},{case(@filechk(SOUND2|file),
{Yes},{snd(SOUND2|file)},
{No}, {display(BELL)})},
{Yes},{display(BELL)})};
%PLTSTOP{SNDMSG({owata_f.snd});
display({\nオートパイロットDORA}|VerLev|{を停止しました\n});
stop};
%AUTOEND{footnote({オートパイロットの終了処理をしています});
display(NET|{-NETとの通信を終了しました\n});
SNDMSG({owata_f.snd});
wait(2)};
/* パラメタで指定されたディレクトリへ移動する(「A:\」と「A:」の両方が可能) */
%setcdir2{[dir]
setcdir(@case(@nochar(dir),2,{im(dir|{\})},,{im(dir)}));
};
/* 指定されたディレクトリー配下に,第2パラメターで指定されたディレクトリを
(もし,無ければ)作成する。 */
%mkdir {[dir,name]
dispoff(!DEBUG);
case (@setcdir2(dir),
{Yes},
{command({mkdir }|name)},
{No},
{
select({装置(}|dir|{)が使えませんが?},
Wtime4,{},
{ もう一回やってみる },{mkdir(dir,name)},
{ 自動処理をやめる },{stop},
{ 無視して先の処理をやる },{}
);
});
dispoff({No})
};
/* 指定されたディレクトリーを(もし,無ければ)作成する。 */
%mkdir2 {[dir]
case (@setcdir2(dir),
{No},
{
case (@nochar(dir)==2,
{Yes},
{
display({装置(}|dir|{)が使えません\n});
SNDMSG({okasi_f.snd});
},
{No},
{
mkdir2(@body(dir,,{\}));
mkdir(@body(dir,,{\}),@tail(dir,{\}));
});
});
};
/* ディレクトリの最終に『\』を付加する */
%dir2 {
[dir]
case (@nochar(dir)==3,
{No},{im(dir|{\})},{Yes},{im(dir)}
);
};
/* 指定ディレクトリのサブディレクトリ名を返す */
%subdir {
[dir,sdir]
case (@nochar(dir)==3,
{Yes},{im(dir|sdir)},
{No},{im(dir|{\}|sdir)}
);
};
/* n番目の部分文字列をとりだす関数 */
%nth {[str,n,sep] /* 元の文字列,順番,区切り文字列 */
var a[256];var m[3]; a:=str;m:=0;
case (n<1,
{Yes},{im({})},
{No},
{loop ({m:=m+1;
case (m==n||a={},{Yes},{im({No})},
{No},{a:=@body(a,sep);im({Yes})});
});
im(@head(a,sep))})};
/* 指定されたSIGボードのパスワードを変数TGKから検索する */
%SCANPW{ [mescan]
var n[3];var sigNo1[3];var mescan1[3];var sigPass[8];
%mkPASS {[sigNo,Spass]
case (@nochar(sigNo)=3,
{No},{sigNo1:={0}|sigNo},
{Yes},{sigNo1:=sigNo}
);
case (@nochar(mescan)=3,
{No},{mescan1:={0}|mescan},
{Yes},{mescan1:=mescan}
);
case (sigNo1=mescan1,
{Yes},{sigPass:=Spass;im({No})},
{No},{sigPass:=NET;im({Yes})}
);
};
%ckPASS{
loop ({ n:=n+1;
%a @getline(TGK,n,1);
case (a={},
{Yes},{im({No})},,
{case (@nth(a,1,{/})={SIGボード},
{Yes},
{mkPASS(@nth(a,4,{/}),@nth(a,5,{/}));},
{No},{im({Yes})}
)
});
});
};
case(mescan={},
{Yes},{im({})},,
{ case(@body(TGK,{SIGボード},{\n})={},
{Yes},{im(NET)},
{No},{ckPASS;im(sigPass)})
});
};
/* 現在の日付・時刻を得る 「yyyy-mm-dd (曜) hh:mm:ss」 */
%getdt {%dt @daylong;%week @case (@getchar(dt,12,3),
{Sun},{im({日})},{Mon},{im({月})},
{Tue},{im({火})},{Wed},{im({水})},
{Thu},{im({木})},{Fri},{im({金})},
{Sat},{im({土})},,{im({ })});
im(@getchar(dt,1,4)|{-}|@getchar(dt,6,2)|{-}|@getchar(dt,9,2)|
{ (}|week|{) }|@getchar(dt,16,8));
};
/* 指定されたファイルをリネームして同一のディレクトリにコピーする */
%renname{
[OLDFILE,NEWFILE]
copyfile(OLDFILE,@body(OLDFILE,,{\})|{\}|NEWFILE);delfile(OLDFILE);
};
/* 指定されたディレクトリに yymmddnn.* というファイルを作成する */
%crefile{[path,sfx]
var n[2];var file1[12];
%d @getdt;%date @getchar(d,3,2)|@getchar(d,6,2)|@getchar(d,9,2);
mkdir2(path);setcdir2(path);
n:=-1;
loop ({ n:=n+1;
case (@nochar(n)=1,{Yes},{n:={0}|n});
case (sfx={},
{Yes},{file1:=date|n},{No}, {file1:=date|n|{.}|sfx});
case (@filechk(file1)={No}||n==99,
{Yes},{im({No})},{No}, {im({Yes})});
});
im(file1)};
/* 全てのメモをクローズする */
%CloseAllMemo{ case(@mlast!=0 && @mcheck==0,{Yes},{mopen(@mlast)});
case(@mcheck!=0,{Yes},{loop({mclose(2);im(@mcheck!=0)})})
};
/* 全てのメモを非編集状態にする */
%InactMemo{
case(@mcheck!=0,{Yes},{mclose(1)});
};
/* ファイル名にワイルドカード(*,?)が含まれるかチェックする */
%wild {[file1]
case (@nochar(file1)==0,
{Yes},
{im({No})},
{No},{
case (@getchar(file1,1,1),
{*},{im({Yes})},
{?},{im({Yes})},
,{im(@wild(@getchar(file1,2)))}
);
});
};
/* 電話料金計算 */
%RYOUKIN{
%cdir @getcdir;
%memono @mlast+1;
%picknt{footnote(NET|{ネットの電話料金を計算中です});
CloseAllMemo;setcdir(CDIR2);
mwrite(TEMP2|{_connect.dat},memono);
case (@filechk(CDIR2|{denwadai.exe}),
{Yes},
{dispoff(!DEBUG);
command({denwadai.exe }|AcPNo|{ }
|TEMP2|{_connect.dat }|TEMP2|{_ryoukin.new }|TELJ);
dispoff({No});
case (@filechk(TEMP2|{_ryoukin.new}),
{Yes},{mclear(memono);
mread(TEMP2|{_ryoukin.new},memono);
mopen(memono,0,21,639,459,{w});
},
{No},{display({みかか代計算に失敗しました\n});
wait(2);mopen(memono,0,21,639,459,{w});mclose(1)
});
},
{No},{display({denwadai.exeが存在しません})});
};
%savememo {CloseAllMemo;
mwrite(LOG2|{アクセスdat\ryoukin.dat},memono)
};
case (@mlast==9,
{Yes},
{footnote({メモ番号が一杯のため、新しいメモを開けません});
wait(2);},
{No},
{CloseAllMemo;madd(memono,{\n});mclear(memono);
case (@filechk(LOG2|{アクセスdat\CONNECT.DAT}),
{Yes},
{mread(LOG2|{アクセスdat\CONNECT.DAT},memono)},
{No},{display({みかか代計算の前には、現在選択した}|
{ネットにアクセスする事が必要です\n})
});
dispoff(!DEBUG);
command({del }|TEMP2|{_connect.dat});
command({del }|TEMP2|{_ryoukin.new});
dispoff({No});
mopen(memono,0,21,639,459,{r});
loop ({
footnote({終了計算中止},{b});
waitx();
case (@xtype,
101,{savememo;im({No})},201,{savememo;im({No})},
102,{picknt;im({Yes})},202,{picknt;im({Yes})},
103,{im({No})}, 203,{im({No})},
,{im({Yes})}
);
});
case (@mcheck==memono,
{Yes},{mclose(3)},
{No},{CloseAllMemo;mopen(memono);mclose(3)}
);
});
setcdir(cdir)
};
/* ID検索処理 */
%IDfile {
<ID検索を可能にする為に>
☆「会員名簿 (or 全員のプロフィールを見る)」を実行下さい。
この場合は、ID検索リストファイルが自動生成されます。
<上記を実行したが、このコメントが出てしまう方へ>
☆「ログファイルの設定」で存在していないファイルを
ID検索リストファイルに指定してませんか?
};
/* 空文(改行コードのみの文字列)をカットする */
%CRCUT{[x] var y[20];
case (x,
CRLF,{y:={}},
{},{y:={}},
,{y:=@body(x,,{})}
);
im(y);
};
%pickid {
%m @nolmemo(memono1); /*メモの総行数を返す*/
%n @xlinenum; /*カーソル位置の行数を返す*/
%l1 @case (n<1,
{Yes},{im(@memo(memono1,1,1))},
{No},
{case (n>m,
{Yes},{im(@memo(memono1,m,1))},
{No},{im(@memo(memono1,n,1))}
);
});
case (@getchar(l1,1,2)={ID},
{Yes}, {im(@body(@body(l1,{:},{/}),{ },{ }))},
{No}, {im(@head(l1,{ }))}
);
};
%pickhd{
%m @nolmemo(memono1);
%n @xlinenum;
%l1 @case (n<1,
{Yes},{im(@memo(memono1,1,1))},
{No},
{case (n>m,
{Yes},{im(@memo(memono1,m,1))},
{No},{im(@memo(memono1,n,1))}
);
});
case (@getchar(l1,1,2)={ID},
{Yes}, {im(@body(@body(l1,{:}),{ },{ }))},
{No}, {im(@getchar(l1,1,18))}
);
};
%prSIDsrch{
case (memono1>9,
{Yes},
{footnote({メモ番号が一杯のためメモを開けません});
wait(1);im({});
},
{No},
{CloseAllMemo;madd(memono1,{\n});mclear(memono1);
case (@filechk(MEMBER),
{Yes},{mread(MEMBER,memono1)},
{No},{
case (@filechk(LOG2|{PROFILE\member.lst}),
{Yes},{mread(LOG2|{PROFILE\member.lst},memono1)},
{No},{madd(memono1,IDfile)}
);
});
});
};
%IDsearch{
%memono1 @mlast+1;
prSIDsrch;mopen(memono1,0,241,639,459,{r});
footnote({検索中止},{b});
loop ({
waitx();
case (@xtype,
101,{footnote({});im(@pickid)},
201,{footnote({});im(@pickid)},
102,{footnote({});im({})},
202,{footnote({});im({})},
memono1,{footnote({});im(@pickid)},
,{im({Yes})}
);
});
case (@mcheck==memono1,
{Yes},{mclose(3)},
{No},{CloseAllMemo;mopen(memono1);mclose(3)}
);
};
%HDsearch{
%memono1 @mlast+1;
prSIDsrch;mopen(memono1,0,241,639,459,{r});
footnote({検索中止},{b});
loop ({
waitx();
case (@xtype,
101,{footnote({});im(@CRCUT(@pickhd))},
201,{footnote({});im(@CRCUT(@pickhd))},
102,{footnote({});im({})},
202,{footnote({});im({})},
memono1,{footnote({});im(@CRCUT(@pickhd))},
,{im({Yes})}
);
});
case (@mcheck==memono1,
{Yes},{mclose(3)},
{No},{CloseAllMemo;mopen(memono1);mclose(3)}
);
};
/* 初期設定 */
%init {
case(OAK={},{Yes},{setoak({J})},{No},{setoak(OAK)});
case(NATTOU={Yes}||NATTOU={No},{Yes},{nattou(NATTOU)});
case(CLICK={Yes}||CLICK={No},{Yes},{click(CLICK)});
case(R<>{}&&G<>{}&&B<>{},{Yes},{backclr(R,G,B)});
case(VBELL={Yes}||VBELL={No},{Yes},{visibell(VBELL)});
case(@tail(BELFIL,{.}),
{snd},{bellfile(BELFIL)},{SND},{bellfile(BELFIL)});
case(TAB<>{},{Yes},{tab(TAB)});
case(TEMP={},{Yes},{TEMP:=CDIR});
case(@nochar(TEMP)==3,{No},{TEMP2:=TEMP|{\}},{Yes},{TEMP2:=TEMP});
case(TEMP<>{}&&@setcdir2(TEMP)={No},{Yes},{mkdir2(TEMP)});
case(LOG={},{Yes},{LOG:=CDIR});
case(@nochar(LOG)==3,{No},{LOG2:=LOG|{\}},{Yes},{LOG2:=LOG});
case(LOG<>{}&&@setcdir2(LOG)={No},{Yes},{mkdir2(LOG)});
case(UP={},{Yes},{UP:=TEMP});
case(@nochar(UP)==3,{No},{UP2:=UP|{\}},{Yes},{UP2:=UP});
case(UP<>{}&&@setcdir2(UP)={No},{Yes},{mkdir2(UP)});
case(@nochar(SOUND)==3,
{No}, {SOUND2:=SOUND|{\}},{Yes},{SOUND2:=SOUND});
case(@nochar(RTTLdir)==3,
{No},{RTTL2:=RTTLdir|{\}},{Yes},{RTTL2:=RTTLdir});
};
/* 指定されたファイルマネージャを起動する */
%FILEMGR{
case (FMGR,
{}, {setcdir(CDIR);#DORAEDIT.PLP},
,
{
%SFX @tail(FMGR,{.});
case (SFX={COM}||SFX={com}||
SFX={EXE}||SFX={exe}||
SFX={BAT}||SFX={bat},
{Yes},
{command(FMGR)}
);
case (SFX={PLT}||SFX={plt}||
SFX={PLP}||SFX={plp},
{Yes},
{setcdir(@body(FMGR,,{\}));%fmgr @read(FMGR);fmgr}
);
});
};
/************************************************************************/
/* 以下メインモジュール */
/************************************************************************/
/* カレントディレクトリセット */
%CDIR @getcdir;
%CDIR2 @case (@nochar(CDIR)==3,{Yes},{im(CDIR)},{No},{im(CDIR|{\})});
/* オートパイロット停止時にPF10で再起動できるように */
setpf(10,{footnote({DORA Loading ...});}|
{setcdir(}|@xc({7b})|CDIR|@xc({7d})|{);}|{#DORAMAIN.PLT});
/* 初期設定 */
case (@nochar(CDIR)==3,
{No}, {SETFILE:=CDIR|{\}|{DORASET.SET}},
{Yes},{SETFILE:=CDIR|{DORASET.SET}}
);
case (@filechk(SETFILE),
{Yes},{setcdir(CDIR);#DORASET.SET;SETFILE1:={標準設定}},
{No}, {setcdir(CDIR);#DORASET.PLP}
);
init;
CloseAllMemo;
case (@nochar(CDIR)==3,
{No}, {TGKFILE:=CDIR|{\}|{DORATGK.SET}},
{Yes},{TGKFILE:=CDIR|{DORATGK.SET}}
);
case (@filechk(TGKFILE),
{Yes},{setcdir(CDIR);#DORATGK.SET;SETFILE2:={標準設定}},
{No}, {setcdir(CDIR);#DORATGK.PLP}
);
/* オープニング画面表示 */
case (OPENING={No},
{No},{ case(@filechk(CDIR2|{DORAOP.COM}),
{Yes},{command({doraop.com }|HOSEI)}
,{No},{})
},
{Yes},{ display({\n\n\n\n\n\n\n\n\n\n\n\n\n\n})
});
/* オープニングメッセージ */
footnote({DORA}|VerLev|{初期処理中});
display(@xc({1B})|{[32m});
display({\n オートパイロットDORA}|VerLev|{を開始します\n});
case(NETname={},
{Yes},{display({ ☆}|NET|{-ネットでの処理を表示します。☆\n}|TGK)},
{No},{display({ ☆}|NETname|{での処理を表示します。☆\n}|TGK)});
footnote({ログファイルは}|LOG|{です。設定は}|NET|{-NETです});setcdir2(CDIR);
display(@xc({1B})|{[37m});setcdir2(CDIR);
loop ({
SNDMSG ({erande_f.snd});footnote({処理を選択してください});
setcdir(CDIR);
select ({処理を選択してください <<DORA( FAPXもどき) >>},
Wtime4*10,{im({Yes})},
{ RTBBS-NETと通信を行う },
{setcdir(CDIR);#DORAONLN.PLP;im({Yes})},
{ 設定ファイルの読み込み },
{setcdir(CDIR);#DORASCHG.PLP;im({Yes})},
{ 各種の設定を行う },
{setcdir(CDIR);#DORASET.PLP;init;im({Yes})},
{ RTBBS-NETでの処理の設定 },
{setcdir(CDIR);#DORATGK.PLP;im({Yes})},
{ 伝言板(最後の一言)へのコメントを書く },
{setcdir(CDIR);#DORAWRIT.PLP;im({Yes})},
{ 電話料金を計算する },
{RYOUKIN;im({Yes})},
{ 受信ログを読む },
{setcdir(CDIR);#DORAVIEW.PLP;im({Yes})},
{ 受信ログを整理する(RTTLC.EXEを実行する) },
{setcdir(CDIR);#DORARTTL.PLP;im({Yes})},
{ ファイル操作 },
{FILEMGR;im({Yes})},
{ DORA}|VerLev|{の説明 },
{#DORAHELP.PLP;im({Yes})},
{ DORAを終了する },
{im({No})})});
display(@xc({1B})|{[36m});
display({\nオートパイロットDORA}|VerLev|{を終了しました\n});
footnote({}); setcdir(CDIR);display(@xc({1B})|{[37m});